*********************
* ATTACK COMMAND    *
*********************
ATTACK   LDA   NOUNH
         BEQ   NOATT0
         TAY
         LDA   OBJVAL,Y
         BEQ   NOATT1
         STA   HOLD
         JSR   LOCOBJ
         CMP   ROOM
         BNE   NOATT2
         LDA   HOLD
         CMP   #13
         BNE   ATT1
         LDA   OBJECT
         CMP   #$FF
         BNE   ATTX
         LDA   #64
         JSR   SYSMSG
         LDA   #00
         STA   OBJECT+36
         LDA   #39
         STA   OBJVAL+78
         STA   OBJVAL+79
         LDA   ROOM
         STA   OBJECT+114
         RTS
ATTX     LDA   #67
         JSR   SYSMSG
         JMP   DEADY
NOATT0   LDA   #26
         JMP   SYSMSG
NOATT1   LDA   #2
         JMP   SYSMSG
NOATT2   LDA   #21
         JMP   SYSMSG
ATT1     CMP   #28
         BNE   ATT2
         LDA   #161
         JSR   SYSMSG
         JMP   DEADY
ATT2     CMP   #32
         BNE   ATT3
         LDA   #80
         JSR   SYSMSG
         JMP   DEADY
ATT3     CMP   #30        
         BNE   ATT4
         LDA   #160
         JSR   SYSMSG
         JMP   DEADY
ATT4     CMP   #49
         BNE   ATT5
         LDA   OBJECT
         CMP   #$FF
         BNE   NOHAM
         LDA   #214
         JSR   SYSMSG
         LDA   #215
         JSR   SYSMSG
WON      LDA   #00
         JMP   WON
NOHAM    LDA   OBJECT+24
         CMP   #$FF
         BNE   NOLASER
         JMP   SHOOT
NOLASER  LDA   #216
         JSR   SYSMSG
         LDA   #217
         JSR   SYSMSG
         JMP   DEADY
ATT5     LDA   #22        
         JMP   SYSMSG
*********************
*  PLAY COMMAND     *
*********************
PLAY     LDA   NOUNH
         BEQ   NOPLAY0
         TAY
         LDA   OBJVAL,Y
         STA   HOLD
         JSR   LOCOBJ
         CMP   #$FF
         BNE   NOPLAY1
         LDA   HOLD
         CMP   #15
         BEQ   FLUTE
         CMP   #20
         BEQ   VIOLIN
         LDA   #164
         JMP   SYSMSG
FLUTE    LDA   #165
         JSR   SYSMSG
         LDA   OBJECT+36
         CMP   ROOM
         BNE   FLUTE1
         LDA   #65
         JSR   SYSMSG
         LDA   #01
         STA   OBJECT+38
FLUTE1   RTS
VIOLIN   LDA   OBJECT+51
         CMP   #$FF
         BNE   NOPLAY3
         LDA   #83
         JSR   SYSMSG
         LDA   OBJECT+63
         CMP   ROOM
         BEQ   VIO2
         CMP   #$FF
         BEQ   VIO1
         RTS
VIO1     DEC   CARRY
VIO2     LDA   #93
         JSR   SYSMSG
         LDA   #00
         STA   OBJECT+63
         LDA   ROOM
         STA   OBJECT+69
         STA   OBJECT+117
         RTS
NOPLAY0  LDA   #26
         JMP   SYSMSG
NOPLAY1  LDA   #24
         JMP   SYSMSG
NOPLAY3  LDA   #82
         JMP   SYSMSG
******************
*CHARM COMMAND   *
******************
CHARM    LDA   NOUNH
         BEQ   NOCHM0
         TAY
         LDA   OBJVAL,Y
         JSR   LOCOBJ
         CMP   ROOM
         BNE   NOCHM1
         LDA   #82
         STA   NOUNH
         JMP   PLAY
NOCHM0   LDA   #26
         JMP   SYSMSG
NOCHM1   LDA   #21
         JMP   SYSMSG
******************
* SCORE COMMAND  *
******************
SCORE    LDA   #167
         JMP   SYSMSG
**********************
* RUB COMMAND        *
**********************
RUB      LDA   NOUNH
         BEQ   NORUB0
         TAY
         LDA   OBJVAL,Y
         BEQ   NORUB1
         STA   HOLD
         JSR   LOCOBJ
         CMP   #$FF
         BNE   NORUB2
         LDA   HOLD
         CMP   #14
         BNE   RUB1
         LDA   OBJECT+3
         CMP   #$FF
         BNE   RUB1
         LDA   #74
         STA   OBDET+13
         JMP   SYSMSG
RUB1     LDA   #168
         JMP   SYSMSG
NORUB0   LDA   #26
         JMP   SYSMSG
NORUB1   LDA   #22
         JMP   SYSMSG
NORUB2   LDA   #24
         JMP   SYSMSG
*********************
*  FEED COMMAND     *
*********************
FEED     LDA   NOUNH
         CMP   #103
         BNE   NOFED0
         LDA   #75
         TAY
         LDA   OBJVAL,Y
         JSR   LOCOBJ
         CMP   #$FF
         BNE   NOFED1
         LDA   ROOM
         CMP   #60
         BNE   NOFED2
         DEC   CARRY
         STA   (POINT),Y
         RTS
NOFED0   LDA   #2         
         JMP   SYSMSG
NOFED1   LDA   #173
         JMP   SYSMSG
NOFED2   LDA   #21
         JMP   SYSMSG
*********************
* DRUG COMMAND      *
*********************
DRUG     LDA   NOUNH
         BEQ   NODRUG0
         TAY
         LDA   OBJVAL,Y
         BEQ   NODRUG1
         CMP   #11
         BEQ   OKDRUG1
         CMP   #16
         BEQ   OKDRUG2
         LDA   #2
         JMP   SYSMSG
OKDRUG1  LDA   OBJECT+30
         CMP   #$FF
         BNE   NODRUG2
         LDA   OBJECT+45
         CMP   #$FF
         BNE   NODRUG3
         LDA   #00
         STA   OBJECT+30
         LDA   #$FF
         STA   OBJECT+111
         LDA   #38
         STA   OBJVAL+75
         STA   OBJVAL+76
         LDA   #90
         JMP   SYSMSG
OKDRUG2  LDA   OBJECT+45
         CMP   #$FF
         BNE   NODRUG2
         LDA   OBJECT+30
         CMP   #$FF
         BEQ   OKDRUG1
         LDA   #170
         JMP   SYSMSG
NODRUG0  LDA   #26
         JMP   SYSMSG
NODRUG1  LDA   #1
         JMP   SYSMSG
NODRUG2  LDA   #24
         JMP   SYSMSG
NODRUG3  LDA   #171
         JMP   SYSMSG
********************
* CLIMB & GO CMMD. *
********************
CLIMB    LDA   ROOM
         CMP   #60
         BNE   NOCLIMB
         LDA   DETAIL+59
         CMP   #172       
         BNE   CLDEAD
         LDA   NOUNH
         CMP   #103
         BEQ   CLOK
         CMP   #89
         BEQ   CLOK
         LDA   #4
         JMP   SYSMSG
CLOK     LDA   #92
         JSR   SYSMSG
         LDA   #92
         STA   OBDET+34
         INC   FLAG4
         RTS
NOCLIMB  LDA   #174
         JMP   SYSMSG
CLDEAD   LDA   #175
         JSR   SYSMSG
         JMP   DEADY
**********************
* DRINK AND EAT CMMD *
**********************
DRINK    LDA   NOUNH
         BEQ   NODRK0
         TAY
         LDA   OBJVAL,Y
         BEQ   NODRK1
         STA   HOLD
         JSR   LOCOBJ
         CMP   #$FF
         BNE   NODRK2
         LDA   HOLD
         CMP   #16
         BNE   DRINK1
DRINK0   LDA   #68
         JSR   SYSMSG
         JMP   DEADY
DRINK1   CMP   #11
         BNE   DRINK2
         LDA   #166
         JSR   SYSMSG
         JMP   DEADY
DRINK2   CMP   #37
         BEQ   DRINK0
         CMP   #19
         BNE   DRINK3
         LDA   #00
         STA   (POINT),Y
         LDA   #09
         JMP   SYSMSG
DRINK3   LDA   #22
         JMP   SYSMSG
NODRK0   LDA   #26
         JMP   SYSMSG
NODRK1   LDA   #22
         JMP   SYSMSG
NODRK2   LDA   #24
         JMP   SYSMSG
***************************
* QUIT  COMMAND           *
***************************
QUIT     LDA   #222
         JSR   SYSMSG
         JSR   GETLN
         LDA   IN         
         CMP   #$D9
         BNE   QUIT1
         JMP   SAVE
QUIT1    CMP   #$CE
         BNE   QUIT
QUIT3    LDA   #00
         JMP   QUIT3
************************
*  SAVE COMMAND        *
************************
ICHID    EQU   $0340
ICDNO    EQU   $0341
ICCOM    EQU   $0342
ICSTA    EQU   $0343
ICBAL    EQU   $0344
ICBAH    EQU   $0345
ICPTL    EQU   $0346
ICPTH    EQU   $0347
ICBLL    EQU   $0348
ICBLH    EQU   $0349
ICAX1    EQU   $034A
ICAX2    EQU   $034B
IOPEN    EQU   $03
GETCHR   EQU   $07
PUTCHR   EQU   $0B
ICLOSE   EQU   $0C
OREAD    EQU   $04
OWRIT    EQU   $08
CIOV     EQU   $E456
IOCB4    EQU   $40
         MSB   OFF
NAME1    ASC   "D1:SAVEGAME"
         DFB   $9B
         ASC   "      "
         MSB   ON
SAVE     LDA   #223       
         JSR   SYSMSG
         JSR   GETLN
         LDX   #IOCB4
         LDA   #>NAME1
         STA   ICBAL,X
         LDA   #<NAME1
         STA   ICBAH,X
         LDA   #OWRIT
         STA   ICAX1,X
         LDA   #00
         STA   ICAX2,X
         LDA   #IOPEN
         STA   ICCOM,X
         JSR   CIOV
         LDY   ICSTA,X
         BPL   L1AX
         JMP   ERRORS
L1AX     LDA   #<SMSG
         CLC
         ADC   #01
         SEC
         SBC   #<RMDIR
         STA   ICBLH,X
         LDX   #IOCB4
         LDA   #00
         STA   ICBLL,X
         LDA   #PUTCHR
         STA   ICCOM,X
         LDA   #>RMDIR
         STA   ICBAL,X
         LDA   #<RMDIR
         STA   ICBAH,X
         JSR   CIOV
         LDY   ICSTA,X
         BPL   L2AX
         JMP   ERRORS
L2AX     LDX   #IOCB4
         LDA   #00
         STA   ICBLH,X
         LDA   #$20
         STA   ICBLL,X
         LDA   #PUTCHR
         STA   ICCOM,X
         LDA   #$D0
         STA   ICBAL,X
         LDA   #$00
         STA   ICBAH,X
         JSR   CIOV
         LDY   ICSTA,X
         BPL   L3AX
         JMP   ERRORS
L3AX     LDX   #IOCB4
         LDA   #ICLOSE
         STA   ICCOM,X
         JSR   CIOV
         LDA   #09        
         JMP   SYSMSG
*
ERRORS   LDA   #225       
         JMP   SYSMSG
***********************
* RESTORE GAME COMMAND*
***********************
RESTORE  LDA   #224       
         JSR   SYSMSG
         JSR   GETLN
         LDX   #IOCB4
         LDA   #>NAME1
         STA   ICBAL,X
         LDA   #<NAME1
         STA   ICBAH,X
         LDA   #OREAD     
         STA   ICAX1,X
         LDA   #00
         STA   ICAX2,X
         LDA   #IOPEN
         STA   ICCOM,X
         JSR   CIOV
         LDY   ICSTA,X
         BPL   L1AZ       
         JMP   ERRORR     
L1AZ     LDA   #<SMSG
         CLC
         ADC   #01
         SEC
         SBC   #<RMDIR
         STA   ICBLH,X
         LDX   #IOCB4
         LDA   #00
         STA   ICBLL,X
         LDA   #GETCHR
         STA   ICCOM,X
         LDA   #>RMDIR
         STA   ICBAL,X
         LDA   #<RMDIR
         STA   ICBAH,X
         JSR   CIOV
         LDY   ICSTA,X
         BPL   L2AZ       
         JMP   ERRORR     
L2AZ     LDX   #IOCB4
         LDA   #00
         STA   ICBLH,X
         LDA   #$20
         STA   ICBLL,X
         LDA   #GETCHR
         STA   ICCOM,X
         LDA   #$D0
         STA   ICBAL,X
         LDA   #$00
         STA   ICBAH,X
         JSR   CIOV
         LDY   ICSTA,X
         BPL   L3AZ       
         JMP   ERRORR     
L3AZ     LDX   #IOCB4
         LDA   #ICLOSE
         STA   ICCOM,X
         JSR   CIOV
         LDA   #09        
         JMP   SYSMSG
*
ERRORR   LDA   #226       
         JMP   SYSMSG
*
*
TABV     STA   CV
         JMP   VTAB
*
NOTCR    LDA   INVFLG
         PHA
         LDA   #$FF
         STA   INVFLG
         LDA   IN,X
         JSR   COUT
         PLA
         STA   INVFLG
         LDA   IN,X
         CMP   #$88
         BEQ   BCKSPC
         CMP   #$98
         BEQ   CANCEL
         CPX   #35
         BCC   NOTCR1
         JSR   BELL
         JMP   CANCEL
NOTCR1   INX
         BNE   NXTCHAR
CANCEL   LDA   #$DC
         JSR   COUT
GETLNZ   JSR   CROUT
GETLN    LDA   PROMPT
         JSR   COUT
         LDX   #$01
BCKSPC   TXA
         BEQ   GETLNZ
         DEX
NXTCHAR  JSR   RDKEY
ADDINP   STA   IN,X
         CMP   #$8D
         BNE   NOTCR
         JSR   CLREOL     
CROUT    LDA   #$8D
         JMP   COUT
RDKEY    LDY   CH
         LDA   #$80       
         STA   (BASL),Y
KEYIN    LDA   KYBD
         CMP   #$FF
         BEQ   KEYIN
         CMP   #$40
         BCS   KEYCLR
         STY   YSAV1
         TAY
         LDA   #$FF
         STA   KYBD
         LDA   CONVERT,Y
         LDY   YSAV1
         PHA
         CMP   #$A0
         BCC   KEY2
         AND   #$7F
         SBC   #$20
         STA   (BASL),Y
         PLA
         RTS
KEY2     LDA   #00
         STA   (BASL),Y
         PLA
         RTS
KEYCLR   LDA   #$FF
         STA   KYBD
         JMP   KEYIN
*
CONVERT  ASC   "LJ;@@K+*O@PU"
         DFB   $8D        
         ASC   "I-="
         ASC   "V@C@@BXZ4@36"
         DFB   $1B
         ASC   "521"
         ASC   ", .N@M/@R@EY"
         DFB   $7F
         ASC   "TWQ"
         ASC   "9@07"
         DFB   $88        
         ASC   "8<>FHD@@GSA"
COUT     EQU   *
COUT1    CMP   #$A0       
         STY   YSAV1
         PHA
         JSR   VIDOUT
         PLA
         LDY   YSAV1
         RTS
BELL1    CMP   #$87
         BNE   RTS2B      OR BELL3 TO SHOW IN INVERSE 
BELL     LDA   #$87
         JSR   $F6A4      ATARI SPEAKER
RTS2B    RTS
BELL3    AND   #$7F
STOADV   LDY   CH
         AND   #$7F
         SEC
         SBC   #$20
         STA   (BASL),Y
ADVANCE  INC   CH
         LDA   CH
         CMP   WNDWDTH
         BCS   CR
RTS3     RTS
VIDOUT   CMP   #$A0
         BCS   STOADV
         TAY
         BPL   STOADV
         CMP   #$8D
         BEQ   CR         
         CMP   #$8A
         BEQ   LF
         CMP   #$88
         BNE   BELL1
BS       DEC   CH
         BPL   RTS3
         LDA   WNDWDTH
         STA   CH
         DEC   CH
         LDA   WNDTOP
         CMP   CV
         BCS   RTS4
         DEC   CV
VTAB     LDA   CV
VTABZ    JSR   BASCALC
         CLC
         LDA   BASL
         ADC   WNDLFT
         STA   BASL
RTS4     RTS
*
CLREOP   LDY   CH
         LDA   CV
CLEOP1   PHA
         JSR   VTABZ
         JSR   CLEOLZ
         LDY   #$00
         PLA
         ADC   #$00
         CMP   WNDBTM
         BCC   CLEOP1
         BCS   VTAB
HOME     LDA   WNDTOP
         STA   CV
         LDY   #$00
         STY   CH
         BEQ   CLEOP1
CR       LDA   #$00
         STA   CH
LF       INC   CV
         LDA   CV
         CMP   WNDBTM
         BCC   VTABZ
         DEC   CV
SCROLL   LDA   WNDTOP
         PHA
         JSR   VTABZ
SCRL1    LDA   BASL
         STA   BAS2L
         LDA   BASH
         STA   BAS2H
         LDY   WNDWDTH
         DEY
         PLA
         ADC   #$01
         CMP   WNDBTM
         BCS   SCRL3
         PHA
         JSR   VTABZ
SCRL2    LDA   (BASL),Y
         STA   (BAS2L),Y
         DEY
         BPL   SCRL2
         BMI   SCRL1
SCRL3    LDY   #$00
         JSR   CLEOLZ
         BCS   VTAB       
CLREOL   LDY   CH
CLEOLZ   LDA   #$00       
CLEOL2   STA   (BASL),Y
         INY
         CPY   WNDWDTH
         BCC   CLEOL2
         RTS
*
BASCALC  PHA
         CLC
         LDA   SCREEN
         ADC   #33
         STA   BASL
         LDA   SCREEN+1
         ADC   #00
         STA   BASH
BASCAL2  PLA
         BEQ   BASRTS
         SEC
         SBC   #$01
         PHA
         CLC
         LDA   BASL
         ADC   #40
         STA   BASL
         LDA   BASH
         ADC   #00
         STA   BASH
         BCC   BASCAL2
BASRTS   RTS
         CHN   TIME.TABLE
